﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Cotizav.AccesoDatos
{
    public class ProvinciaDAO
    {
        public List<Entidades.Provincia> Listar(Util.ContextoDB ctx)
        {
            SqlCommand cmd = new SqlCommand("select * from PROVINCIA", ctx.GetConexion(), ctx.GetTx());
            DataTable dtProvincia = new DataTable();
            dtProvincia.Load(cmd.ExecuteReader());

            List<Entidades.Provincia> lista = new List<Entidades.Provincia>();

            foreach (DataRow fila in dtProvincia.Rows)
            {
                Entidades.Provincia p = new Entidades.Provincia();

                p.IdProvincia = Int32.Parse(fila["ID"].ToString());
                p.NombreProvincia = fila["NOMBREPROVINCIA"].ToString();
                p.Activo = Int32.Parse(fila["ACTIVO"].ToString());
                p.FechaRegistro = !(fila["FECHAREGISTRO"] is DBNull) ? Convert.ToDateTime(fila["FECHAREGISTRO"].ToString()) : new Nullable<DateTime>();
                p.FechaModificacion = !(fila["FECHAMODIFICACION"] is DBNull) ? Convert.ToDateTime(fila["FECHAMODIFICACION"].ToString()) : new Nullable<DateTime>();
                p.UsuarioRegistro = fila["USUARIOREGISTRO"].ToString();
                p.UsuarioModificacion = fila["USUARIOMODIFICACION"].ToString();

                lista.Add(p);
            }

            return lista;
        }

        public int Registrar(Util.ContextoDB ctx, Entidades.Provincia newProvincia)
        {
            SqlCommand cmd = new SqlCommand("USP_PROVINCIA_INSERT", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", 0).Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.AddWithValue("@NOMBREPROVINCIA",newProvincia.NombreProvincia ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", newProvincia.Activo);
            cmd.Parameters.AddWithValue("@FECHAREGISTRO", newProvincia.FechaRegistro ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOREGISTRO", newProvincia.UsuarioRegistro ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            int id = Int32.Parse(cmd.Parameters["@ID"].Value.ToString());
            newProvincia.IdProvincia = id;

            return result;
        }

        public int Eliminar(Util.ContextoDB ctx ,Entidades.Provincia selProvincia)
        {
            SqlCommand cmd = new SqlCommand("USP_PROVINCIA_ELIMINAR", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", selProvincia.IdProvincia);

            int result = cmd.ExecuteNonQuery();

            return result;
        }

        public int Actualizar(Util.ContextoDB ctx, Entidades.Provincia updProvincia)
        {
            SqlCommand cmd = new SqlCommand("USP_PROVINCIA_UPDATE", ctx.GetConexion(), ctx.GetTx());
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@ID", updProvincia.IdProvincia);
            cmd.Parameters.AddWithValue("@NOMBREPROVINCIA", updProvincia.NombreProvincia ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@ACTIVO", updProvincia.Activo);
            cmd.Parameters.AddWithValue("@FECHAMODIFICACION", updProvincia.FechaModificacion ?? (object)DBNull.Value);
            cmd.Parameters.AddWithValue("@USUARIOMODIFICACION", updProvincia.UsuarioModificacion ?? (object)DBNull.Value);

            int result = cmd.ExecuteNonQuery();

            return result;
        }
    }
}
